package com.wyh.common.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;

import static com.wyh.common.utils.UrlUNtil.extractFileName;


@Slf4j
public class pdfToPng {
    //这里固定 到时候需要的时候在 以传参数的形式进行修改
    private static String Format=".png";

    public static InputStream convertPdfToImage(InputStream pdfInputStream) throws IOException {
        PDDocument document = null;
        ByteArrayOutputStream baos = null;
        ByteArrayInputStream inputStream = null;
        String format = "png"; // 确保定义了图像格式

        try {
            document = PDDocument.load(pdfInputStream);
            PDFRenderer pdfRenderer = new PDFRenderer(document);

            // 创建一个 ByteArrayOutputStream 来保存 PNG 数据
            baos = new ByteArrayOutputStream();

            // 遍历 PDF 中的每一页
            for (int page = 0; page < document.getNumberOfPages(); page++) {
                // 将页面呈现为图像
                BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 600, ImageType.RGB);

                // 将图像作为 PNG 写入 ByteArrayOutputStream
                ImageIO.write(bim, format, baos);
            }

            // 将 ByteArrayOutputStream 转换为 InputStream
            inputStream = new ByteArrayInputStream(baos.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        } finally {
            // 关闭最终块中的资源，以确保它们始终处于关闭状态
            if (baos != null) {
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (document != null) {
                try {
                    document.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (pdfInputStream != null) {
                try {
                    pdfInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        // 返回包含 PNG 数据的 InputStream, 不要关闭 inputStream
        return inputStream;
    }

    // 只截取文件名 同时添加文件后缀
    public static String extractFileName(String filePath) {
        int lastIndex = filePath.lastIndexOf('/');
        if (lastIndex == -1) {
            lastIndex = filePath.lastIndexOf('\\');
        }
        String fileNameWithExtension = filePath.substring(lastIndex + 1); //获取代拓展名的文件名部份
        return fileNameWithExtension.split("\\.")[0] + Format; //去掉拓展名在加上后缀
    }



}